home *** CD-ROM | disk | FTP | other *** search
-
- #include <Sound.h>
-
- void AInitSnd (void);
- OSErr ASndPlay (Handle);
- void AStopSnd (void);
- Boolean SndIsPlaying (void);
-
- static SndChannelPtr gSndChannel0, gSndChannel1, gSndChannel2;
- static Boolean gSndPlaying0, gSndPlaying1, gSndPlaying2;
- static SndCommand myCommand;
-
- /*=========================================================*/
-
- #define TRUE 1
- #define FALSE 0
- #define NIL 0
-
- void
- AInitSnd (void)
-
- {
- extern Boolean gSndIsInitted;
- OSErr myErr = 0;
-
- if (!gSndIsInitted) {
-
- gSndChannel0 = (SndChannelPtr) NewPtrClear(sizeof(SndChannel));
- if (gSndChannel0 != nil) {
- gSndChannel0->qLength = stdQLength;
- myErr = SndNewChannel(&gSndChannel0, sampledSynth, initMono+initChanLeft, (ProcPtr) NIL);
- } /* if */
- gSndPlaying0 = FALSE;
-
- gSndChannel1 = (SndChannelPtr) NewPtrClear(sizeof(SndChannel));
- if (gSndChannel1 != nil) {
- gSndChannel1->qLength = stdQLength;
- myErr = SndNewChannel(&gSndChannel1, sampledSynth, initMono+initChanLeft, (ProcPtr) NIL);
- } /* if */
- gSndPlaying1 = FALSE;
-
- gSndChannel2 = (SndChannelPtr) NewPtrClear(sizeof(SndChannel));
- if (gSndChannel2 != nil) {
- gSndChannel2->qLength = stdQLength;
- myErr = SndNewChannel(&gSndChannel2, sampledSynth, initMono+initChanLeft, (ProcPtr) NIL);
- } /* if */
- gSndPlaying2 = FALSE;
-
- gSndIsInitted = TRUE;
- } /* if */
-
- } /* AInitSnd() */
-
- OSErr
- ASndPlay (Handle My_snd_Handle)
-
- {
- OSErr err = noErr;
- extern Boolean gSoundOn;
- static short chan;
-
- if (!gSoundOn)
- return;
-
- if ((++chan > 2) || (chan < 0))
- chan = 0;
-
- switch(chan) {
- case 0:
- gSndPlaying0 = FALSE;
- myCommand.cmd = quietCmd;
- err = SndDoImmediate (gSndChannel0, &myCommand);
- if (err == noErr)
- {
- err = SndPlay (gSndChannel0, My_snd_Handle, TRUE);
- if (err == noErr)
- {
- gSndPlaying0 = TRUE;
- }
- }
- break;
- case 1:
- gSndPlaying1 = FALSE;
- myCommand.cmd = quietCmd;
- err = SndDoImmediate (gSndChannel1, &myCommand);
- if (err == noErr)
- {
- err = SndPlay (gSndChannel1, My_snd_Handle, TRUE);
- if (err == noErr)
- {
- gSndPlaying1 = TRUE;
- }
- }
- break;
- case 2:
- gSndPlaying2 = FALSE;
- myCommand.cmd = quietCmd;
- err = SndDoImmediate (gSndChannel2, &myCommand);
- if (err == noErr)
- {
- err = SndPlay (gSndChannel2, My_snd_Handle, TRUE);
- if (err == noErr)
- {
- gSndPlaying2 = TRUE;
- }
- }
- break;
- } /* switch */
- return (err);
- }
-
- void
- AStopSnd (void)
-
- {
- extern Boolean gSndIsInitted;
- OSErr myErr = 0;
-
- if (gSndIsInitted) {
- myErr = SndDisposeChannel (gSndChannel0, TRUE);
- gSndPlaying0 = FALSE;
- myErr = SndDisposeChannel (gSndChannel1, TRUE);
- gSndPlaying1 = FALSE;
- myErr = SndDisposeChannel (gSndChannel2, TRUE);
- gSndPlaying2 = FALSE;
- gSndIsInitted = FALSE;
- } /* if */
-
- } /* AStopSnd() */
-